/*
  参数默认值
    使用
      在书写形参时，直接给型参赋值，附的值即为默认值

      这样一来，当调用函数时，如果没有给对应的参数赋值（给他的值时undefined），则会自动使用默认值
    
    对arguments的影响
      只要给函数加上默认值，该函数会自动变为严格模式下的规则：arguments和形参脱离

    留言暂时性死区
      形参和ES6中的let或const一样，具有作用域，并且根据参数的声明顺序，存在暂时性死区
*/
// "use strict";
function sum(a, b = 1, c = 2) {
  // es6之前处理默认值
  /* b = b === undefined && 1
  c = c === undefined && 2 */
  return a + b + c;
}

// 对arguments的影响
function test(a, b = 1) {
  console.log(arguments[0], arguments[1]);
  console.log(a, b);
  a = 2;
  b = 3;
  console.log(arguments[0], arguments[1]);
  console.log(a, b);
}
test(1, 2);

// 留言暂时性死区
function test2(a = b, b) {
  console.log(a, b);
}
test2(undefined, 2);
